La diabetes es una enfermedad crónica que afecta a millones de personas en todo el mundo y que representa un desafío creciente para los sistemas de salud. Las complicaciones asociadas con la diabetes, como enfermedades cardiovasculares, nefropatías y neuropatías, pueden aumentar significativamente la necesidad de hospitalización. Además, diversos estudios han sugerido que factores ambientales, incluyendo las variaciones climáticas, podrían desempeñar un papel importante en la exacerbación de síntomas y el desarrollo de complicaciones en personas con diabetes.
A pesar de estos indicios, aún existe una considerable falta de conocimiento sobre cómo las condiciones climáticas específicas, como la temperatura, la humedad, o las precipitaciones, pueden influir en la salud de las personas diabéticas y en los patrones de hospitalización. En particular, no se ha explorado suficientemente si existen correlaciones consistentes entre variables climáticas y las tasas de hospitalización. Este vacío de conocimiento es especialmente relevante en el contexto de un clima cambiante que podría exacerbar estas tendencias.
Con este seminario, buscamos abordar estas lagunas mediante un enfoque interdisciplinario que integre datos climáticos históricos y registros de hospitalización para analizar posibles relaciones entre estas variables y aportar al entendimiento de los factores ambientales que afectan a las personas con diabetes.
Explorar y analizar la relación entre las hospitalizaciones por diabetes y las variaciones en las condiciones climáticas (como temperatura, humedad y precipitaciones), con el fin de identificar patrones y posibles correlaciones que contribuyan al conocimiento de los factores ambientales que influyen en esta enfermedad.
Evaluar la relación entre picos de hospitalización por diabetes y extremos climáticos, como olas de calor o periodos de alta humedad.
Identificar posibles correlaciones entre las variaciones climáticas y las tasas de hospitalización, explorando la fuerza y dirección de dichas relaciones.
Determinar si existen diferencias significativas en el impacto de las condiciones climáticas sobre las hospitalizaciones por diabetes en distintas regiones geográficas.
#Ejecuciones
A continuación se recogen todos los paquetes utilizados para el tratamiento de los detos de trabajo.
library(pxR)
library(climaemet)
library(dplyr)
library(stringr)
library(shiny)
library(ggplot2)
library(plotly)
library(tidyr)
library(mapSpain)
library(countrycode)
library(sf)
library(DT)
library(readr)
## Use this function to register your API Key temporarly or permanently
# aemet_api_key("eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJmcGFibG81NDVAZ21haWwuY29tIiwianRpIjoiYTI2NWIyNzQtY2M4OS00NWZmLThlNGYtMWJlYWQ2NTA1MTAxIiwiaXNzIjoiQUVNRVQiLCJpYXQiOjE3MjkzNTMxNTgsInVzZXJJZCI6ImEyNjViMjc0LWNjODktNDVmZi04ZTRmLTFiZWFkNjUwNTEwMSIsInJvbGUiOiIifQ.TGFw-QlkAkMyQ2hItIpbSF_xDIoN42JpIzUhf-dOm3A", install= TRUE)
Obtenemos los nombres de archivos con datos de diabetes
archivos <- list.files('INPUT/DATA/Diabetes/Ingresos/', pattern = '*.px')
Añadimos la ruta completa de cada archivo
archivos_pc <- sapply(archivos, function(x) paste0('INPUT/DATA/Diabetes/Ingresos/', x))
Creamos el dataframe base con el primer archivo, que servirá para concatenar los datos de años siguientes
df_i <- data.frame(as.data.frame(read.px(archivos_pc[1])))
df_i['Año'] <- 1997 # Añadir columna de año
Bucle para añadir cada año al dataframe
for (i in 2:length(archivos_pc)) {
# Cargar los datos del año específico
df_provisional <- data.frame(as.data.frame(read.px(archivos_pc[i])))
# Extraer el año del nombre del archivo
año <- unlist(strsplit(archivos[i], "\\."))[1]
año <- substr(año, nchar(año) - 3, nchar(año))
# Añadir columna de año al nuevo dataframe
df_provisional['Año'] <- año
# Asegurar que las columnas coincidan
colnames(df_provisional) <- colnames(df_i)
# Concatenar el dataframe con el del año anterior
df_i <- rbind(df_i, df_provisional)
}
Tras la carga de datos, el dataframe queda así:
Primero eliminamos el atributo ‘Diagnóstico’
df_i <- select(df_i,-Diagnóstico)
Si analizamos los distintos valores que toma el atributo ‘Provincia.de.hospitalización’ observamos que supera la suma de provincias (50), ciudades autónomas (2), comunidades autónomas no uniprovinciales (10) y país (1).
length(levels(df_i$Provincia.de.hospitalización))
## [1] 154
Limpiamos los nombres de las provincias: eliminamos números y ajustamos algunos nombres para normalización.
df_i$Provincia.de.hospitalización <- str_replace_all(df_i$Provincia.de.hospitalización,"[0123456789]","") %>%
str_replace_all("^ ","") %>%
str_replace_all("Araba/Á","A") %>%
str_replace_all("/Alacant", '') %>%
str_replace_all("ANDALUCÍA", 'Andalucía') %>%
str_replace_all('ARAGÓN', 'Aragón') %>%
str_replace_all('ASTURIAS','Asturias') %>%
str_replace_all('Asturias \\(Principado de\\)', 'Asturias') %>%
str_replace_all('Asturias, Principado de', 'Asturias') %>%
str_replace_all('Asturias, PRINCIPADO DE', 'Asturias') %>%
str_replace_all('Ávila', 'Avila') %>%
str_replace_all('BALEARS, ILLES', 'Baleares') %>%
str_replace_all('Balears, Illes', 'Baleares') %>%
str_replace_all('Balears \\(Illes\\)', 'Baleares') %>%
str_replace_all("CANARIAS", 'Canarias') %>%
str_replace_all("CANTABRIA", 'Cantabria') %>%
str_replace_all("Castellón de la Plana", 'Castellón') %>%
str_replace_all("/Castelló", '') %>%
str_replace_all("CASTILLA - LA MANCHA", 'Castilla - La Mancha') %>%
str_replace_all("CASTILLA Y LEÓN", 'Castilla y León') %>%
str_replace_all("CATALUÑA", 'Cataluña') %>%
str_replace_all("Comunitat Valenciana", 'Comunidad Valenciana') %>%
str_replace_all("COMUNITAT VALENCIANA", 'Comunidad Valenciana') %>%
str_replace_all("Coruña \\(A\\)", 'A Coruña') %>%
str_replace_all("Coruña, A", 'A Coruña') %>%
str_replace_all("EXTREMADURA", 'Extremadura') %>%
str_replace_all("GALICIA", 'Galicia') %>%
str_replace_all("Guipúzcoa", 'Gipuzkoa') %>%
str_replace_all('MADRID, COMUNIDAD DE','Madrid') %>%
str_replace_all('Madrid, Comunidad de', 'Madrid') %>%
str_replace_all('Madrid \\(Comunidad de\\)', 'Madrid') %>%
str_replace_all('MURCIA, REGIÓN DE','Murcia') %>%
str_replace_all('Murcia \\(Región de\\)','Murcia') %>%
str_replace_all('Murcia, Región de','Murcia') %>%
str_replace_all('Murcia*', 'Murcia') %>%
str_replace_all('NAVARRA, COMUNIDAD FORAL DE','Navarra') %>%
str_replace_all('Navarra \\(Comun. Foral de\\)', 'Navarra') %>%
str_replace_all('Navarra, Comunidad Foral de', 'Navarra') %>%
str_replace_all('PAÍS VASCO', 'País Vasco') %>%
str_replace_all("Palmas \\(Las\\)", 'Las Palmas') %>%
str_replace_all("Palmas, Las", 'Las Palmas') %>%
str_replace_all("Rioja \\(La\\)", 'La Rioja') %>%
str_replace_all("Rioja, La", 'La Rioja') %>%
str_replace_all("RIOJA, LA", 'La Rioja') %>%
str_replace_all("TOTAL NACIONAL", 'Total') %>%
str_replace_all("Total Nacional", 'Total') %>%
str_replace_all("/València", '') %>%
str_replace_all("Bizkaia", 'Vizcaya')
Comprobamos de nuevo el número de distintos valores en ‘Provincia.de.hospitalización’.
length(levels(factor(df_i$Provincia.de.hospitalización)))
## [1] 63
Se han registrado el sexo de los individuos masculinos como “Varón” o “Hombres”
levels(factor(df_i$Sexo))
## [1] "Varones" "Mujeres" "Ambos sexos" "Hombres"
Se modifica de tal manera de que solo se registren como “Hombres”
df_i$Sexo <- str_replace_all(df_i$Sexo,"Varones", 'Hombres')
levels(factor(df_i$Sexo))
## [1] "Ambos sexos" "Hombres" "Mujeres"
Se añade la información refenrente a la comunidad autónoma como un nuevo atributo y se eliminan los registros que aglutinan los datos de las comunidades no uniprovinciales y el total nacional.`
df_i<- df_i %>%
mutate(Comunidad.Autonoma = case_when(
Provincia.de.hospitalización %in% c("Almería","Cádiz","Córdoba","Granada","Huelva","Jaén","Málaga","Sevilla") ~ "Andalucía",
Provincia.de.hospitalización %in% c("Huesca","Teruel","Zaragoza") ~ "Aragón",
Provincia.de.hospitalización == "Baleares" ~ "Baleares",
Provincia.de.hospitalización == "Asturias" ~ "Asturias",
Provincia.de.hospitalización %in% c("Las Palmas","Santa Cruz de Tenerife") ~ "Canarias",
Provincia.de.hospitalización == "Cantabria" ~ "Cantabria",
Provincia.de.hospitalización %in% c("Avila","Burgos", "León", "Palencia", "Salamanca", "Segovia", "Soria", "Valladolid", "Zamora") ~ "Castilla y León",
Provincia.de.hospitalización %in% c("Albacete", "Ciudad Real", "Cuenca", "Guadalajara", "Toledo") ~ "Castilla - La Mancha",
Provincia.de.hospitalización %in% c("Barcelona", "Girona", "Lleida", "Tarragona") ~ "Cataluña",
Provincia.de.hospitalización %in% c("Alicante", "Castellón", "Valencia") ~ "Comunidad Valenciana",
Provincia.de.hospitalización %in% c("Badajoz", "Cáceres") ~ "Extremadura",
Provincia.de.hospitalización %in% c("A Coruña", "Lugo", "Ourense", "Pontevedra") ~ "Galicia",
Provincia.de.hospitalización == "Madrid" ~ "Madrid",
Provincia.de.hospitalización == "Murcia" ~ "Murcia",
Provincia.de.hospitalización == "Navarra" ~ "Navarra",
Provincia.de.hospitalización %in% c("Alava", "Gipuzkoa", "Vizcaya") ~ "País Vasco",
Provincia.de.hospitalización == "La Rioja" ~ "La Rioja",
Provincia.de.hospitalización == "Ceuta" ~ "Ceuta",
Provincia.de.hospitalización == "Melilla" ~ "Melilla"
)) %>%
filter(!grepl("^(Total|Andalucía|Aragón|Canarias|Castilla y León|Castilla - La Mancha|Cataluña|Comunidad Valenciana|Extremadura|Galicia|País Vasco)"
, Provincia.de.hospitalización))
df_i <- rename(.data = df_i, Provincia = Provincia.de.hospitalización, Diagnosticos = value)
datos_muertes <- read.px('INPUT/DATA/Diabetes/Muertes/muertes1997-2022.px')
Convertimos los datos de muertes a un dataframe para facilitar el análisis
df_m <- as.data.frame(datos_muertes)
Mostramos las primeras filas del dataframe para verificar la carga de datos
Realizamos los mismos cambios que con los datos de muertes por diabetes.
df_m <- select(df_m,-Causa.de.muerte)
Estandarizamos los nombres de las provincias.
df_m$Provincias <- str_replace_all(df_m$Provincias,"[0123456789]","") %>%
str_replace_all("^ ","") %>%
str_replace_all("Araba/Á","A") %>%
str_replace_all("/Alacant", '') %>%
str_replace_all("ANDALUCÍA", 'Andalucía') %>%
str_replace_all('ARAGÓN', 'Aragón') %>%
str_replace_all('ASTURIAS','Asturias') %>%
str_replace_all('Asturias \\(Principado de\\)', 'Asturias') %>%
str_replace_all('Asturias, Principado de', 'Asturias') %>%
str_replace_all('Asturias, PRINCIPADO DE', 'Asturias') %>%
str_replace_all('Ávila', 'Avila') %>%
str_replace_all('BALEARS, ILLES', 'Baleares') %>%
str_replace_all('Balears, Illes', 'Baleares') %>%
str_replace_all('Balears \\(Illes\\)', 'Baleares') %>%
str_replace_all("CANARIAS", 'Canarias') %>%
str_replace_all("CANTABRIA", 'Cantabria') %>%
str_replace_all("Castellón de la Plana", 'Castellón') %>%
str_replace_all("/Castelló", '') %>%
str_replace_all("CASTILLA - LA MANCHA", 'Castilla - La Mancha') %>%
str_replace_all("CASTILLA Y LEÓN", 'Castilla y León') %>%
str_replace_all("CATALUÑA", 'Cataluña') %>%
str_replace_all("Comunitat Valenciana", 'Comunidad Valenciana') %>%
str_replace_all("COMUNITAT VALENCIANA", 'Comunidad Valenciana') %>%
str_replace_all("Coruña \\(A\\)", 'A Coruña') %>%
str_replace_all("Coruña, A", 'A Coruña') %>%
str_replace_all("EXTREMADURA", 'Extremadura') %>%
str_replace_all("GALICIA", 'Galicia') %>%
str_replace_all("Guipúzcoa", 'Gipuzkoa') %>%
str_replace_all('MADRID, COMUNIDAD DE','Madrid') %>%
str_replace_all('Madrid, Comunidad de', 'Madrid') %>%
str_replace_all('Madrid \\(Comunidad de\\)', 'Madrid') %>%
str_replace_all('MURCIA, REGIÓN DE','Murcia') %>%
str_replace_all('Murcia \\(Región de\\)','Murcia') %>%
str_replace_all('Murcia, Región de','Murcia') %>%
str_replace_all('Murcia*', 'Murcia') %>%
str_replace_all('NAVARRA, COMUNIDAD FORAL DE','Navarra') %>%
str_replace_all('Navarra \\(Comun. Foral de\\)', 'Navarra') %>%
str_replace_all('Navarra, Comunidad Foral de', 'Navarra') %>%
str_replace_all('PAÍS VASCO', 'País Vasco') %>%
str_replace_all("Palmas \\(Las\\)", 'Las Palmas') %>%
str_replace_all("Palmas, Las", 'Las Palmas') %>%
str_replace_all("Rioja \\(La\\)", 'La Rioja') %>%
str_replace_all("Rioja, La", 'La Rioja') %>%
str_replace_all("RIOJA, LA", 'La Rioja') %>%
str_replace_all("TOTAL NACIONAL", 'Total') %>%
str_replace_all("Total Nacional", 'Total') %>%
str_replace_all("/València", '') %>%
str_replace_all("Bizkaia", 'Vizcaya')
Se modifica el valor “Ambos sexos” por “Total” para que el atributo sexo comparta los mismos niveles en los dataframes de ingresos y muertes.
levels(factor(df_m$Sexo))
## [1] "Total" "Hombres" "Mujeres"
df_m$Sexo <- str_replace_all(df_m$Sexo,"Total","Ambos sexos")
levels(factor(df_m$Sexo))
## [1] "Ambos sexos" "Hombres" "Mujeres"
De igual manera que con los datos de ingresos, se añade la información referente a la comunidad autónoma como un nuevo atributo y se eliminan los registros que aglutinan los datos de las comunidades no uniprovinciales y el total nacional.
df_m <- df_m %>%
mutate(Comunidad.Autonoma = case_when(
Provincias %in% c("Almería","Cádiz","Córdoba","Granada","Huelva","Jaén","Málaga","Sevilla") ~ "Andalucía",
Provincias %in% c("Huesca","Teruel","Zaragoza") ~ "Aragón",
Provincias == "Baleares" ~ "Baleares",
Provincias == "Asturias" ~ "Asturias",
Provincias %in% c("Las Palmas","Santa Cruz de Tenerife") ~ "Canarias",
Provincias == "Cantabria" ~ "Cantabria",
Provincias %in% c("Avila","Burgos", "León", "Palencia", "Salamanca", "Segovia", "Soria", "Valladolid", "Zamora") ~ "Castilla y León",
Provincias %in% c("Albacete", "Ciudad Real", "Cuenca", "Guadalajara", "Toledo") ~ "Castilla - La Mancha",
Provincias %in% c("Barcelona", "Girona", "Lleida", "Tarragona") ~ "Cataluña",
Provincias %in% c("Alicante", "Castellón", "Valencia") ~ "Comunidad Valenciana",
Provincias %in% c("Badajoz", "Cáceres") ~ "Extremadura",
Provincias %in% c("A Coruña", "Lugo", "Ourense", "Pontevedra") ~ "Galicia",
Provincias == "Madrid" ~ "Madrid",
Provincias == "Murcia" ~ "Murcia",
Provincias == "Navarra" ~ "Navarra",
Provincias %in% c("Alava", "Gipuzkoa", "Vizcaya") ~ "País Vasco",
Provincias == "La Rioja" ~ "La Rioja",
Provincias == "Ceuta" ~ "Ceuta",
Provincias == "Melilla" ~ "Melilla"
)) %>%
filter(!grepl("^(Extranjero|Nacional|Total|Andalucía|Aragón|Canarias|Castilla y León|Castilla - La Mancha|Cataluña|Comunidad Valenciana|Extremadura|Galicia|País Vasco)"
, Provincias))
df_m<-rename(.data = df_m, Provincia = Provincias, Muertes = value, Año = Periodo)
Se recogen todas las estaciones de la aemet.
estaciones <- aemet_stations()
A continuación, se muestra la estructura de los datos:
Selección de los códigos de las estaciones meteorológicas de interés.
codigos <- c("C449C", "C658L", "0076", "0367", "1212E", "1387", "1484C", "1505", "1690A", "2030", "2331", "2422", "2465", "2614", "2870", "3129", "3013", "3260B", "4121", "4452", "4642E", "5000C", "5530E", "5783", "6000A", "7178I", "8025", "8096", "8178D", "8368U", "8414A", "9434", "9771C", "9898", "6325O", "9091O", "2444", "B278", "1082", "3469A", "5973", "1111", "8500A", "5402", "1014", "5270B", "9170", "6155A", "9263D", "0016A", "2661", "2235U")
Generación del dataframe Datos_metdonde se almacenarán
los datos.
datos_met <- data.frame(matrix(ncol = 5))
colnames(datos_met) <- c('codigo', 'ta_max', 'ta_min', 'tm_mes', 'año')
Obtención de los datos de tempertatura máxima, mínima y media mesual durante los años 2003 a 2020 de todas las estaciones selecionadas.
A continuación, se muestra el código para acceder a dichos datos de la AEMET. Para una mayor rapidez de renderizado se importan los datos desde un archivo.
for (año in 2003:2020){
print(año)
for (i in codigos){
print(i)
met_prov <- as.data.frame(aemet_monthly_clim(i, year = año)) %>%
slice (1:12) %>%
select(c('ta_max', 'ta_min', 'tm_mes'))
met_prov$ta_max <- sapply(met_prov$ta_max, FUN = function(x) as.numeric(unlist(strsplit(x, '\\('))[1]) )
met_prov$ta_min <- sapply(met_prov$ta_min, FUN = function(x) as.numeric(unlist(strsplit(x, '\\('))[1]) )
met_procesados <- data.frame('codigo' = i,
'ta_max' = max(met_prov$ta_max, na.rm = TRUE),
'ta_min' = min(met_prov$ta_min, na.rm = TRUE),
'tm_mes' = mean(met_prov$tm_mes, na.rm = TRUE),
'año' = año)
# print(met_procesados)
datos_met <- rbind(datos_met, met_procesados)
# print(datos_met)
Sys.sleep(1.5)
}
}
load('datos_aemet.RData')
Añadimos la provincia correspondiente a cada registro.
cod_estaciones <- estaciones %>%
select(indicativo,provincia) %>%
rename(codigo = indicativo)
datos_met <- merge(datos_met,cod_estaciones, by = 'codigo')
Estandarizamos los nombres de los atributos y de las provincias. Eliminamos el atributo ‘codigo’
datos_met<-rename(.data = datos_met, Provincia = provincia, Año = año)
datos_met <- select(datos_met,-codigo)
datos_met$Año <- as.character(datos_met$Año)
datos_met$Provincia <- str_replace_all(datos_met$Provincia,"TARRAGONA","Tarragona") %>%
str_replace_all("BARCELONA", "Barcelona") %>%
str_replace_all("GIRONA", "Girona") %>%
str_replace_all("GIPUZKOA", "Gipuzkoa") %>%
str_replace_all("BIZKAIA", "Vizcaya") %>%
str_replace_all("CANTABRIA", 'Cantabria') %>%
str_replace_all('ASTURIAS','Asturias') %>%
str_replace_all("A CORUÑA", "A Coruña") %>%
str_replace_all("PONTEVEDRA", "Pontevedra") %>%
str_replace_all("LUGO", "Lugo") %>%
str_replace_all("OURENSE", "Ourense") %>%
str_replace_all("SORIA", "Soria") %>%
str_replace_all("PALENCIA", "Palencia") %>%
str_replace_all("BURGOS", "Burgos") %>%
str_replace_all("VALLADOLID", "Valladolid") %>%
str_replace_all("AVILA", "Avila") %>%
str_replace_all("SEGOVIA", "Segovia") %>%
str_replace_all("ZAMORA", "Zamora") %>%
str_replace_all("LEON", "León") %>%
str_replace_all("SALAMANCA", "Salamanca") %>%
str_replace_all("GUADALAJARA", "Guadalajara") %>%
str_replace_all("MADRID", "Madrid") %>%
str_replace_all("TOLEDO", "Toledo") %>%
str_replace_all("CACERES", "Cáceres") %>%
str_replace_all("CIUDAD REAL", "Ciudad Real") %>%
str_replace_all("BADAJOZ", "Badajoz") %>%
str_replace_all("HUELVA", "Huelva") %>%
str_replace_all("CEUTA", "Ceuta") %>%
str_replace_all("JAEN", "Jaén") %>%
str_replace_all("CORDOBA", "Córdoba") %>%
str_replace_all("GRANADA", "Granada") %>%
str_replace_all("SEVILLA", "Sevilla") %>%
str_replace_all("CADIZ", "Cádiz") %>%
str_replace_all("MELILLA", "Melilla") %>%
str_replace_all("MALAGA", "Málaga") %>%
str_replace_all("ALMERIA", "Almería") %>%
str_replace_all("MURCIA", "Murcia") %>%
str_replace_all("ALICANTE", "Alicante") %>%
str_replace_all("CUENCA", "Cuenca") %>%
str_replace_all("ALBACETE", "Albacete") %>%
str_replace_all("TERUEL", "Teruel") %>%
str_replace_all("VALENCIA", "Valencia") %>%
str_replace_all("CASTELLON", "Castellón") %>%
str_replace_all("ARABA/ALAVA", "Alava") %>%
str_replace_all("LA RIOJA", "La Rioja") %>%
str_replace_all("NAVARRA", "Navarra") %>%
str_replace_all("ZARAGOZA", "Zaragoza") %>%
str_replace_all("LLEIDA", "Lleida") %>%
str_replace_all("HUESCA", "Huesca") %>%
str_replace_all("ILLES BALEARS", "Baleares") %>%
str_replace_all("STA. CRUZ DE TENERIFE", "Santa Cruz de Tenerife") %>%
str_replace_all("LAS PALMAS", "Las Palmas")
Para un mejor análisis de los resultados finales se obtienen las poblaciones anuales de cada provincia.
Poblacion <- read_delim("INPUT/DATA/Poblacion/Poblacion.csv",
delim = ";",locale = locale(encoding = "ISO-8859-1"), ,escape_double = FALSE, trim_ws = TRUE) %>%
select(!(Edad)) %>%
filter(grepl('enero', Periodo)) %>%
suppressMessages()
Inicialmente Población se estructura así:
Poblacion$Provincias <- str_replace_all(Poblacion$Provincias,"[0123456789]","") %>%
str_replace_all("^ ","") %>%
str_replace_all("Araba/Á","A") %>%
str_replace_all("/Alacant", '') %>%
str_replace_all('Ávila', 'Avila') %>%
str_replace_all('Balears, Illes', 'Baleares') %>%
str_replace_all("CANARIAS", 'Canarias') %>%
str_replace_all("CANTABRIA", 'Cantabria') %>%
str_replace_all("/Castelló", '') %>%
str_replace_all("Coruña, A", 'A Coruña') %>%
str_replace_all("Guipúzcoa", 'Gipuzkoa') %>%
str_replace_all('Murcia*', 'Murcia') %>%
str_replace_all("Palmas, Las", 'Las Palmas') %>%
str_replace_all("Rioja, La", 'La Rioja') %>%
str_replace_all("/València", '') %>%
str_replace_all("Bizkaia", 'Vizcaya')
Poblacion$Periodo <- substr(Poblacion$Periodo,nchar(Poblacion$Periodo)-4,nchar(Poblacion$Periodo)) %>%
as.integer()
Nos quedamos con la parte entera del valor referente a población y lo guardamos como número.
Poblacion$Total <- sapply(sapply(Poblacion$Total, strsplit, split = ','), function(x) x[1])
Poblacion$Total <- Poblacion$Total %>%
str_replace_all("\\.","") %>%
as.integer()
Poblacion <- rename(.data = Poblacion, Provincia = Provincias, Año = Periodo, Total_d = Total)
Unión de datos de ingreso y muerte
df_combined <- left_join(x = df_i, y = df_m, by = c("Provincia", "Año", "Comunidad.Autonoma", "Sexo"))
Unión de todos los datos de diabetes (en df_combined) y datos meteorológicos.
df_combined <- left_join(x = df_combined, y = datos_met, by = c("Provincia", "Año"))
Resultado final.
head(df_combined)
## Provincia Sexo Diagnosticos Año Comunidad.Autonoma Muertes ta_max ta_min
## 1 Almería Hombres 3172 1997 Andalucía 37 NA NA
## 2 Cádiz Hombres 7641 1997 Andalucía 82 NA NA
## 3 Córdoba Hombres 2943 1997 Andalucía 62 NA NA
## 4 Granada Hombres 3974 1997 Andalucía 74 NA NA
## 5 Huelva Hombres 1654 1997 Andalucía 37 NA NA
## 6 Jaén Hombres 3042 1997 Andalucía 52 NA NA
## tm_mes
## 1 NA
## 2 NA
## 3 NA
## 4 NA
## 5 NA
## 6 NA
En la aplicacion shiny ademas de encontrar estos dos primeros graficos de ejemplo encontraremos muchos mas ejemplos
datos_filtrados <- df_combined %>%
filter(Año >= 2010 & Sexo == "Ambos sexos")
p <- ggplot(datos_filtrados, aes_string(x = "Año", y = "Diagnosticos", color = "Comunidad.Autonoma",
group = "Comunidad.Autonoma", text = "paste('Provincia:', Provincia)"
)) +
geom_point() +
geom_smooth(method = "lm", aes(color = Comunidad.Autonoma), se = FALSE ) +
labs(title = paste("Diagnosticos", "(cada 100.000 hab) por año y provincia (Sexo:", "Ambos sexos", ")"),
x = "Año", y = "Diagnosticos") +
theme_minimal()
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
ggplotly(p)
## `geom_smooth()` using formula = 'y ~ x'
## Warning: The following aesthetics were dropped during statistical transformation: text.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
## the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
## variable into a factor?
print(p)
## `geom_smooth()` using formula = 'y ~ x'
## Warning: The following aesthetics were dropped during statistical transformation: text.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
## the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
## variable into a factor?
datos_filtrados_temp <- df_combined %>%
filter(Sexo == "Ambos sexos" & !is.na(tm_mes) & Año >= 2010)
p2 <- ggplot(datos_filtrados_temp, aes_string(
x = "tm_mes",
y = "Diagnosticos",
color = "Comunidad.Autonoma",
text = "paste('Provincia:', Provincia, '<br>Año:', Año)"
)) +
geom_point(alpha = 0.6) +
geom_smooth(
method = "lm",
se = TRUE,
aes_string(x = "tm_mes", y = "Diagnosticos"),
inherit.aes = FALSE,
color = "black"
) +
labs(title = paste("Relación entre", "Diagnosticos", "y","tm_mes", "(cada 100.000 hab) (Sexo:", "Ambos sexos", ")"),
x = "tm_mes", y = "Número de:Diagnosticos") +
theme_minimal()
ggplotly(p2)
## `geom_smooth()` using formula = 'y ~ x'
print(p2)
## `geom_smooth()` using formula = 'y ~ x'
### Esto es una prueba del shiny e inicio del mismo
Para poder ejecutar esto correctamente hemos de insertar la carga de datos etc arriba
library(shiny)
library(ggplot2)
# Supongamos que el dataframe ya está cargado en tu entorno de trabajo con el nombre df_i
# Interfaz de usuario
ui <- fluidPage(
titlePanel("Comparación de Casos por Provincia entre Dos Años"),
sidebarLayout(
sidebarPanel(
selectInput("year1", "Seleccione el primer año:", choices = NULL), # Se llenará dinámicamente
selectInput("year2", "Seleccione el segundo año:", choices = NULL), # Se llenará dinámicamente
selectInput("sex", "Seleccione el sexo:", choices = NULL) # Se llenará dinámicamente
),
mainPanel(
plotOutput("histPlot")
)
)
)
# Servidor
server <- function(input, output, session) {
# Actualizar las opciones de los menús desplegables dinámicamente
observe({
updateSelectInput(session, "year1", choices = unique(df_i$Año))
updateSelectInput(session, "year2", choices = unique(df_i$Año))
updateSelectInput(session, "sex", choices = unique(df_i$Sexo))
})
output$histPlot <- renderPlot({
# Filtrar los datos en función de los años y el sexo seleccionados
datos_filtrados <- df_i[(df_i$Año == input$year1 | df_i$Año == input$year2) & df_i$Sexo == input$sex, ]
# Crear el histograma comparativo
ggplot(datos_filtrados, aes(x = Provincia.de.hospitalización, y = value, fill = as.factor(Año))) +
geom_bar(stat = "identity", position = "dodge") +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(x = "Provincia", y = "Casos", title = paste("Comparación de casos entre", input$year1, "y", input$year2),
fill = "Año")
})
}
# Correr la aplicación
shinyApp(ui = ui, server = server)